package ch.ifage.business.dom;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Lob;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Ensemble des éléments qui caractérise une étape.
 * @author Christian
 *
 */
@Embeddable
public class StepProperties implements Serializable {

	/**
	 * serial uid.
	 */
	private static final long serialVersionUID = 1451178894568612447L;
	
	/**
	 * Nom du fichier en entrée de l'étape.
	 */
	@Column(name = "FILENAME")
	private String filename;
	
	/**
	 * heure début du job.
	 */
	@Column(name = "START_TIME")
	@Temporal(TemporalType.TIMESTAMP)
	private GregorianCalendar startTime;
	
	/**
	 * heure de fin du job.
	 */
	@Column(name = "END_TIME")
	@Temporal(TemporalType.TIMESTAMP)
	private GregorianCalendar endTime;
	
	/**
	 * Activité de l'étape.
	 */
	@Column(name = "ACTIVITY")
	private Activity activity;
	
	/**
	 * Parametre de l'étape.
	 */
	@Column(name = "PARAMETER")
	private String parameter;
	
	/**
	 * status de l'étape.
	 */
	@Column(name = "STATUS")
	private Status status;
	
	/**
	 * La log de l'exécution de l'étape.
	 */
	@Lob
	@Column(table = "LOGS" , name = "LOG", nullable = true)
	private String log;
	
	
	/**
	 * Contructeur de propriété d'étape.
	 * @param filename nom du fichier en entrée de l'étape.
	 * @param startTime heure de début de l'étape.
	 * @param endTime heure de fin de l'étape.
	 * @param activity type de l'étape.
	 * @param parameter paramètre de l'étape.
	 * @param status état de l'étape.
	 * @param log log de l'étape.
	 */
	public StepProperties(final String filename,
						  final GregorianCalendar startTime, final GregorianCalendar endTime, 
					      final Activity activity, final String parameter, final Status status, 
					      final String log) {
		super();
		this.filename = filename;
		this.startTime = startTime;
		this.endTime = endTime;
		this.activity = activity;
		this.parameter = parameter;
		this.status = status;
		this.log = log;
	}
	
	/**
	 * Contructeur de propriété d'étape.
	 */
	public StepProperties() {
		super();
	}

	/**
	 * @return the filename.
	 */
	public final String getFilename() {
		return filename;
	}

	/**
	 * @param filename the filename to set.
	 */
	public final void setFilename(final String filename) {
		this.filename = filename;
	}

	/**
	 * @return heure de début de l'étape.
	 */
	public final GregorianCalendar getStartTime() {
		return startTime;
	}

	/**
	 * @param startTime heure de début de l'étape.
	 */
	public final void setStartTime(final GregorianCalendar startTime) {
		this.startTime = startTime;
	}

	/**
	 * @return heure de fin de l'étape.
	 */
	public final GregorianCalendar getEndTime() {
		return endTime;
	}
	
	/**
	 * @param endTime heure de fin de l'étape.
	 */
	public final void setEndTime(final GregorianCalendar endTime) {
		this.endTime = endTime;
	}

	/**
	 * @return c
	 */
	public final Activity getActivity() {
		return activity;
	}

	/**
	 * @param activity heure de fin de l'étape.
	 */
	public final void setActivity(final Activity activity) {
		this.activity = activity;
	}

	/**
	 * @return paramètres de l'étape.
	 */
	public final String getParameter() {
		return parameter;
	}

	/**
	 * @param parameter paramètres de l'étape.
	 */
	public final void setParameter(final String parameter) {
		this.parameter = parameter;
	}

	/**
	 * @return status de l'étape.
	 */
	public final Status getStatus() {
		return status;
	}

	/**
	 * @param status état de l'étape.
	 */
	public final void setStatus(final Status status) {
		this.status = status;
	}

	/**
	 * @return la log de l'étape.
	 */
	public final String getLog() {
		return log;
	}

	/**
	 * @param log la log de l'étape.
	 */
	public final void setLog(final String log) {
		this.log = log;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public final String toString() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return "StepPropriety [filename=" + filename + " startTime=" 
				+ sdf.format(startTime.getTime()) + ", endTime=" + sdf.format(endTime.getTime()) 
				+ ", activity=" + activity + ", parameter=" + parameter + ", status=" + status + ", log=" 
				+ log + "]";
	}

	
}